package main

/*
 by zy,
   2025.10.30 - loadFromFile(), loadCertAndKey()  加载证书、私钥
   2025.11.04 - saveToFile(), saveCertAndKey()  保存证书、私钥
*/

import (
  "fmt"
  "os"
)

// 加载指定文件
func loadFromFile(fn string) (string, error) {
  const __func__ = "loadFromFile():"

  if fn == "" { // 空文件名
    return "", fmt.Errorf("%s empty filename", __func__)
  }

  ret, err := os.ReadFile(fn)
  if err != nil { // 其它原因，例如文件不存在，没权限
    return "", fmt.Errorf("%s failed to read %s: %v", __func__, fn, err)
  }

  return string(ret), nil
}

// 加载证书文件和密钥文件
func loadCertAndKey(cfg *CLI) error {
    var err error
    cfg.CertStr, err = loadFromFile(cfg.CertFile)
    if err != nil {
        return fmt.Errorf("failed to get cert: %w", err)
    }
    cfg.KeyStr, err = loadFromFile(cfg.KeyFile)
    if err != nil {
        return fmt.Errorf("failed to get key: %w", err)
    }
    return nil
}

// 保存到指定文件
func saveToFile(fn, content string) error {
  return os.WriteFile(fn, []byte(content), 0600)
}

// 如果指定了证书、私钥的文件名，按文件名保存，否则输出到终端
func saveCertAndKey(cfg *CLI) error {
  if cfg.CertFile == "" {
    _, _ = fmt.Println("Cert:\n", cfg.CertStr)
  } else {
    if err := saveToFile(cfg.CertFile, cfg.CertStr); err != nil {
      return err
    } else {
      _, _ = fmt.Printf("Cert is saved to %s\n", cfg.CertFile)
    }
  }
  if cfg.KeyFile == "" {
    _, _ = fmt.Println("Key:\n", cfg.KeyStr)
  } else {
    if err := saveToFile(cfg.KeyFile, cfg.KeyStr); err != nil {
      return err
    } else {
      _, _ = fmt.Printf("Private key is saved to %s\n", cfg.KeyFile)
    }
  }
  return nil
}

